Testing of a software application is the process of executing test cases to check and ensure whether all functions of the application are working in a desired manner. It is generally a mandatory process to ensure quality of the product being launched to the market. Often, even after testing, almost all applications produce bugs of different kinds. Users may provide feedbacks indicating possible occurrence of bugs. In that case, the developers have to make sufficient code changes to fix the bugs. In a different scenario, most of the application developers keep on improving their products by adding new features and by removing certain features; and modified application is launched as new version of the application already available in the market.
In either scenario, code change happens and it is responsibility of testing team to test the new application for errors/bugs. However, thousands of test cases may be required to test complex applications. Issue is that even if the application has undergone minor changes and only a few files are modified/changed, the testing team is required to run all test cases, which is a cumbersome and time consuming process. Main reason why all test cases needs to be executed even for minor code changes is that to ensure overall stability of the product. Additionally, it is not easy nor a norm/practice to identify/define test cases pertaining to a file change.
To handle this issue especially time and resources are constrains, a process known as “test suite optimization” is followed by the testing team in which sophisticated mechanisms are used for identifying test case related to a particular code/file change. However, disadvantage of existing systems used for test suite optimization is that they require user intervention at different levels of processing and typically misses to use the rich historical evidences, by confining to current release specifications and changes. Another disadvantage of these systems is that since output completely depends on inputs provided by the user, quality of output may vary based on experience, skill, and knowledge of the user who is providing inputs to the system.